Added single call UI changes for foldable devices, like in previous version

This commit is contained in:
Sylvain Berfini 2022-06-29 14:21:20 +02:00
parent 9d082e2630
commit a45549d360
14 changed files with 107 additions and 24 deletions

View file

@ -26,6 +26,7 @@ import android.os.SystemClock
import android.view.MotionEvent
import android.view.View
import android.widget.Chronometer
import androidx.constraintlayout.widget.ConstraintSet
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.navigation.navGraphViewModels
@ -261,18 +262,20 @@ class SingleCallFragment : GenericFragment<VoipSingleCallFragmentBinding>() {
private fun updateHingeRelatedConstraints(state: FoldingFeature.State) {
Log.i("[Single Call] Updating constraint layout hinges: $state")
/*val constraintLayout = binding.constraintLayout
val constraintLayout = binding.constraintLayout
val set = ConstraintSet()
set.clone(constraintLayout)
if (state == FoldingFeature.State.HALF_OPENED) {
set.setGuidelinePercent(R.id.hinge_top, 0.5f)
set.setGuidelinePercent(R.id.hinge_bottom, 0.5f)
controlsViewModel.folded.value = true
} else {
set.setGuidelinePercent(R.id.hinge_top, 0f)
set.setGuidelinePercent(R.id.hinge_bottom, 1f)
controlsViewModel.folded.value = false
}
set.applyTo(constraintLayout)*/
set.applyTo(constraintLayout)
}
}

View file

@ -61,6 +61,8 @@ class ControlsViewModel : ViewModel() {
val fullScreenMode = MutableLiveData<Boolean>()
val folded = MutableLiveData<Boolean>()
val pipMode = MutableLiveData<Boolean>()
val chatRoomCreationInProgress = MutableLiveData<Boolean>()

View file

@ -13,6 +13,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/numpad_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"

View file

@ -22,6 +22,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/voip_buttons_fragment_size">
@ -106,6 +107,7 @@
app:layout_constraintStart_toEndOf="@id/audio_routes" />
<ProgressBar
android:id="@+id/video_toggle_in_progress"
style="?android:attr/progressBarStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
@ -128,6 +130,7 @@
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/extra_count"
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -12,6 +12,7 @@
</data>
<LinearLayout
android:id="@+id/audio_routes_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_audio_routes_background"
@ -20,6 +21,7 @@
android:orientation="vertical">
<ImageView
android:id="@+id/bluetooth_audio_route"
android:selected="@{controlsViewModel.isBluetoothHeadsetSelected}"
android:onClick="@{() -> controlsViewModel.forceBluetoothAudioRoute()}"
android:contentDescription="@string/content_description_use_bluetooth_headset"
@ -30,6 +32,7 @@
android:src="@drawable/icon_bluetooth" />
<ImageView
android:id="@+id/earpiece_audio_route"
android:selected="@{!controlsViewModel.isSpeakerSelected &amp;&amp; !controlsViewModel.isBluetoothHeadsetSelected}"
android:onClick="@{() -> controlsViewModel.forceEarpieceAudioRoute()}"
android:contentDescription="@string/content_description_use_earpiece"
@ -40,6 +43,7 @@
android:src="@drawable/icon_earpiece" />
<ImageView
android:id="@+id/speaker_audio_route"
android:selected="@{controlsViewModel.isSpeakerSelected}"
android:onClick="@{() -> controlsViewModel.forceSpeakerAudioRoute()}"
android:contentDescription="@string/content_description_use_speaker"

View file

@ -23,6 +23,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/extra_buttons_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/voip_call_extra_buttons_height"
android:layout_marginStart="15dp"
@ -76,6 +77,7 @@
app:layout_constraintVertical_chainStyle="spread" />
<TextView
android:id="@+id/unread_chat_count"
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -90,6 +92,7 @@
app:layout_constraintTop_toTopOf="@id/chat" />
<ProgressBar
android:id="@+id/chat_room_creation_progress"
style="?android:attr/progressBarStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
@ -178,6 +181,7 @@
app:layout_constraintTop_toBottomOf="@id/chat" />
<TextView
android:id="@+id/paused_calls_count"
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -13,6 +13,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/locally_paused_call_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
@ -22,8 +23,12 @@
<ImageView
android:id="@+id/resume_call"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintWidth_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintDimensionRatio="1:1"
android:layout_marginTop="5dp"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:onClick="@{() -> data.resume()}"
@ -53,6 +58,7 @@
style="@style/conference_paused_subtitle_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:gravity="center"
android:text="@string/call_locally_paused_subtitle"
app:layout_constraintBottom_toBottomOf="parent"

View file

@ -10,6 +10,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/remotely_paused_call_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
@ -19,8 +20,12 @@
<ImageView
android:id="@+id/paused_call"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintWidth_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintDimensionRatio="1:1"
android:layout_marginTop="5dp"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:padding="40dp"
@ -37,6 +42,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:text="@string/call_remotely_paused_title"
app:layout_constraintBottom_toBottomOf="parent"

View file

@ -16,6 +16,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/stats_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
@ -47,6 +48,7 @@
app:layout_constraintTop_toTopOf="@id/background" />
<androidx.core.widget.NestedScrollView
android:id="@+id/stats_scroll_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/hide_stats"
@ -57,6 +59,7 @@
android:layout_marginBottom="10dp">
<LinearLayout
android:id="@+id/stats_list_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"

View file

@ -22,8 +22,12 @@
<ImageView
android:id="@+id/resume_conference"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintWidth_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintDimensionRatio="1:1"
android:layout_marginTop="5dp"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:onClick="@{() -> conferenceViewModel.resumeConference()}"
@ -53,6 +57,7 @@
style="@style/conference_paused_subtitle_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:gravity="center"
android:text="@string/conference_paused_subtitle"
app:layout_constraintBottom_toBottomOf="parent"

View file

@ -13,6 +13,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/numpad_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"

View file

@ -8,9 +8,12 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/remote_recording_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
android:paddingTop="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp">
<View
android:id="@+id/remote_recording_background"

View file

@ -37,10 +37,34 @@
android:background="?attr/voipBackgroundColor">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraint_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@{controlsViewModel.fullScreenMode ? @color/black_color : @color/transparent_color}">
<View
android:id="@+id/top_barrier"
android:layout_width="0dp"
android:layout_height="1dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="@{controlsViewModel.folded ? @dimen/margin_0dp : callsViewModel.currentCallData.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/hinge_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/hinge_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="1" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group"
android:layout_width="wrap_content"
@ -57,7 +81,7 @@
android:layout_marginTop="10dp"
android:text="@{(callsViewModel.currentCallData.contact.name ?? callsViewModel.currentCallData.displayName) + ` - `, default=`John Doe - `}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@id/hinge_top" />
<Chronometer
android:id="@+id/active_call_timer"
@ -66,7 +90,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintStart_toEndOf="@id/remote_name"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@id/hinge_top" />
<TextView
android:id="@+id/remote_address"
@ -95,18 +119,26 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:barrierMargin="20dp"
app:constraint_referenced_ids="remote_address,remotely_recorded" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/bottom_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:constraint_referenced_ids="primary_buttons,hinge_bottom" />
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="@{controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? @dimen/voip_remote_margin_full_screen : @dimen/voip_remote_margin, default=@dimen/voip_remote_margin}"
android:background="@drawable/shape_remote_background"
app:layout_constraintBottom_toTopOf="@id/primary_buttons"
app:layout_constraintBottom_toTopOf="@id/bottom_barrier"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/call_header_barrier" />
app:layout_constraintTop_toBottomOf="@id/top_barrier" />
<ImageView
android:id="@+id/avatar"
@ -115,14 +147,15 @@
android:layout_margin="20dp"
android:contentDescription="@null"
coilVoipContact="@{callsViewModel.currentCallData}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/background"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_size"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background"
app:layout_constraintWidth_max="@dimen/voip_contact_avatar_max_size" />
<TextView
android:id="@+id/display_name"
style="@style/call_remote_name_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -147,33 +180,37 @@
android:id="@+id/record_call"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:layout_marginStart="10dp"
android:background="@drawable/button_toggle_background"
android:contentDescription="@string/content_description_toggle_recording"
android:onClick="@{() -> callsViewModel.currentCallData.toggleRecording()}"
android:enabled="@{!callsViewModel.currentCallData.isPaused &amp;&amp; !callsViewModel.currentCallData.isRemotelyPaused}"
android:padding="7dp"
android:selected="@{callsViewModel.currentCallData.isRecording}"
android:src="@drawable/icon_call_record"
android:visibility="@{controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? View.GONE : View.VISIBLE}"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background" />
app:layout_constraintTop_toBottomOf="@id/call_header_barrier" />
<ImageView
android:id="@+id/take_snapshot"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:background="@drawable/button_toggle_background"
android:contentDescription="@string/content_description_take_screenshot"
android:onClick="@{() -> callsViewModel.takeSnapshot()}"
android:enabled="@{!callsViewModel.currentCallData.isPaused &amp;&amp; !callsViewModel.currentCallData.isRemotelyPaused}"
android:src="@drawable/icon_call_screenshot"
android:visibility="@{!controlsViewModel.showTakeSnaptshotButton || controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? View.GONE : View.VISIBLE}"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/record_call" />
<ImageView
android:id="@+id/pause_call"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/button_toggle_background"
android:contentDescription="@string/content_description_pause_call"
android:enabled="@{callsViewModel.currentCallData.isPaused || callsViewModel.currentCallData.canBePaused}"
@ -183,7 +220,7 @@
android:src="@drawable/icon_pause"
android:visibility="@{controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? View.GONE : View.VISIBLE}"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background" />
app:layout_constraintTop_toBottomOf="@id/call_header_barrier" />
<androidx.constraintlayout.widget.Group
android:id="@+id/video_preview_group"
@ -200,7 +237,7 @@
android:onTouch="@{previewTouchListener}"
app:alignTopRight="true"
app:displayMode="black_bars"
app:layout_constraintBottom_toTopOf="@id/primary_buttons"
app:layout_constraintBottom_toTopOf="@id/bottom_barrier"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintHeight_max="200dp"
app:layout_constraintWidth_max="200dp"
@ -257,7 +294,7 @@
android:layout="@layout/voip_call_paused_by_remote"
android:visibility="@{callsViewModel.currentCallData.isRemotelyPaused ? View.VISIBLE : View.GONE, default=gone}"
app:inflatedVisibility="@{callsViewModel.currentCallData.isRemotelyPaused ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toTopOf="@id/primary_buttons"
app:layout_constraintBottom_toTopOf="@id/bottom_barrier"
app:layout_constraintTop_toTopOf="parent" />
<ViewStub
@ -269,10 +306,11 @@
android:visibility="@{callsViewModel.currentCallData.isPaused ? View.VISIBLE : View.GONE, default=gone}"
app:data="@{callsViewModel.currentCallData}"
app:inflatedVisibility="@{callsViewModel.currentCallData.isPaused ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toTopOf="@id/primary_buttons"
app:layout_constraintBottom_toTopOf="@id/bottom_barrier"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/popup_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
@ -280,12 +318,14 @@
android:visibility="@{controlsViewModel.showExtras ? View.VISIBLE : View.GONE, default=gone}" />
<include
android:id="@+id/extra_buttons"
layout="@layout/voip_buttons_extra"
android:layout_width="0dp"
android:layout_height="@dimen/voip_call_extra_buttons_height"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:translationY="@{controlsViewModel.extraButtonsMenuTranslateY, default=@dimen/voip_call_extra_buttons_translate_y}"
android:visibility="@{View.VISIBLE, default=gone}"
app:callsViewModel="@{callsViewModel}"
app:conferenceViewModel="@{conferenceViewModel}"
app:controlsViewModel="@{controlsViewModel}"

View file

@ -70,4 +70,6 @@
<dimen name="master_fragment_width">280dp</dimen>
<dimen name="voip_active_speaker_top_margin">10dp</dimen>
<dimen name="margin_0dp">0dp</dimen>
<dimen name="voip_single_call_header_size">50dp</dimen>
<dimen name="voip_single_call_header_size_with_record_info">85dp</dimen>
</resources>