Fixed issue with video call layout + auto accept video requests

This commit is contained in:
Sylvain Berfini 2023-09-12 11:58:34 +02:00
parent 036301e34f
commit c8ea1bcd8c
9 changed files with 49 additions and 22 deletions

View file

@ -83,6 +83,14 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
showCallActivity()
}
}
Call.State.UpdatedByRemote -> {
// TODO FIXME: remove
val params = core.createCallParams(call)
params?.isVideoEnabled = true
core.isVideoCaptureEnabled = true
core.isVideoDisplayEnabled = true
call.acceptUpdate(params)
}
else -> {
}
}

View file

@ -214,11 +214,11 @@ class ActiveCallFragment : GenericCallFragment() {
if (feature.state == FoldingFeature.State.HALF_OPENED) {
set.setGuidelinePercent(R.id.hinge_top, 0.5f)
set.setGuidelinePercent(R.id.hinge_bottom, 0.5f)
sharedViewModel.folded.value = true
callViewModel.halfOpenedFolded.value = true
} else {
set.setGuidelinePercent(R.id.hinge_top, 0f)
set.setGuidelinePercent(R.id.hinge_bottom, 1f)
sharedViewModel.folded.value = false
callViewModel.halfOpenedFolded.value = false
}
set.applyTo(constraintLayout)

View file

@ -69,6 +69,8 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
val pipMode = MutableLiveData<Boolean>()
val halfOpenedFolded = MutableLiveData<Boolean>()
// To synchronize chronometers in UI
val callDuration = MutableLiveData<Int>()

View file

@ -29,6 +29,4 @@ class SharedCallViewModel @UiThread constructor() : ViewModel() {
val toggleFullScreenEvent = MutableLiveData<Event<Boolean>>()
val foldingState = MutableLiveData<FoldingFeature>()
val folded = MutableLiveData<Boolean>()
}

View file

@ -36,6 +36,7 @@ import androidx.annotation.ColorRes
import androidx.annotation.UiThread
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
@ -307,6 +308,22 @@ fun AppCompatEditText.editTextSetting(lambda: () -> Unit) {
})
}
@BindingAdapter("android:layout_marginBottom")
fun setConstraintLayoutBottomMargin(view: View, margins: Float) {
val params = view.layoutParams as ConstraintLayout.LayoutParams
val m = margins.toInt()
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, m)
view.layoutParams = params
}
@BindingAdapter("android:layout_marginTop")
fun setConstraintLayoutTopMargin(view: View, margins: Float) {
val params = view.layoutParams as ConstraintLayout.LayoutParams
val m = margins.toInt()
params.setMargins(params.leftMargin, m, params.rightMargin, params.bottomMargin)
view.layoutParams = params
}
@BindingAdapter("focusNextOnInput")
fun focusNextOnInput(editText: EditText, enabled: Boolean) {
if (!enabled) return

View file

@ -106,6 +106,8 @@
android:id="@+id/remote_video_surface"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="@{viewModel.fullScreenMode || viewModel.pipMode || viewModel.halfOpenedFolded ? @dimen/zero : @dimen/in_call_main_actions_menu_height, default=@dimen/in_call_main_actions_menu_height}"
android:layout_marginTop="@{viewModel.fullScreenMode || viewModel.pipMode || viewModel.halfOpenedFolded ? @dimen/zero : @dimen/in_call_top_bar_info_height, default=@dimen/in_call_top_bar_info_height}"
android:onClick="@{() -> viewModel.toggleFullScreen()}"
android:visibility="@{viewModel.isVideoEnabled ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toTopOf="parent"
@ -122,8 +124,8 @@
<ImageView
android:id="@+id/call_direction_icon"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:adjustViewBounds="true"
android:src="@{viewModel.isOutgoing ? @drawable/outgoing_call : @drawable/incoming_call, default=@drawable/outgoing_call}"
@ -135,7 +137,7 @@
style="@style/default_text_style_800"
android:id="@+id/call_direction_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/in_call_top_bar_text_height"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
@ -150,33 +152,31 @@
style="@style/default_text_style_800"
android:id="@+id/separator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/in_call_top_bar_text_height"
android:layout_marginStart="5dp"
android:textColor="@color/white"
android:textSize="16sp"
android:text="@string/vertical_separator"
app:layout_constraintStart_toEndOf="@id/call_direction_label"
app:layout_constraintTop_toTopOf="@id/call_direction_label"
app:layout_constraintBottom_toBottomOf="@id/call_direction_label"/>
app:layout_constraintTop_toTopOf="@id/call_direction_label"/>
<Chronometer
style="@style/default_text_style_800"
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/in_call_top_bar_text_height"
android:layout_marginStart="5dp"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@id/separator"
app:layout_constraintTop_toTopOf="@id/call_direction_label"
app:layout_constraintBottom_toBottomOf="@id/call_direction_label"/>
app:layout_constraintTop_toTopOf="@id/call_direction_label"/>
<ImageView
android:onClick="@{() -> viewModel.switchCamera()}"
android:id="@+id/switch_camera"
android:layout_width="34dp"
android:layout_height="34dp"
android:padding="5dp"
android:layout_width="@dimen/in_call_top_bar_info_height"
android:layout_height="@dimen/in_call_top_bar_info_height"
android:padding="10dp"
android:layout_marginEnd="10dp"
android:src="@drawable/camera_rotate"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; viewModel.isVideoEnabled &amp;&amp; viewModel.showSwitchCamera ? View.VISIBLE : View.GONE}"

View file

@ -17,8 +17,8 @@
<ImageView
android:id="@+id/call_direction_icon"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:adjustViewBounds="true"
android:src="@drawable/incoming_call"
@ -30,7 +30,7 @@
style="@style/default_text_style_800"
android:id="@+id/call_direction_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/in_call_top_bar_text_height"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"

View file

@ -17,8 +17,8 @@
<ImageView
android:id="@+id/call_direction_icon"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:adjustViewBounds="true"
android:src="@drawable/outgoing_call"
@ -30,7 +30,7 @@
style="@style/default_text_style_800"
android:id="@+id/call_direction_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/in_call_top_bar_text_height"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"

View file

@ -29,6 +29,8 @@
<dimen name="top_bar_height">55dp</dimen>
<dimen name="toast_top_margin">70dp</dimen> <!-- 15dp + top_bar_height -->
<dimen name="in_call_top_bar_text_height">28dp</dimen>
<dimen name="in_call_top_bar_info_height">48dp</dimen> <!-- Size of top text + top & bottom margins -->
<dimen name="in_call_main_actions_menu_height">110dp</dimen>
<dimen name="in_call_extra_actions_menu_height">235dp</dimen>
<dimen name="in_call_all_actions_menu_height">345dp</dimen> <!-- sum of above two -->