Fixed call related layout issues + added setting for early media

This commit is contained in:
Sylvain Berfini 2020-08-25 10:32:00 +02:00
parent c657156ee8
commit eadb55e9c4
9 changed files with 142 additions and 73 deletions

View file

@ -23,6 +23,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.core.* import org.linphone.core.*
class IncomingCallViewModelFactory(private val call: Call) : class IncomingCallViewModelFactory(private val call: Call) :
@ -43,8 +44,10 @@ class IncomingCallViewModel(call: Call) : CallViewModel(call) {
init { init {
screenLocked.value = false screenLocked.value = false
inviteWithVideo.value = call.currentParams.videoEnabled() inviteWithVideo.value = call.remoteParams?.videoEnabled()
earlyMediaVideoEnabled.value = call.state == Call.State.IncomingEarlyMedia && call.currentParams.videoEnabled() earlyMediaVideoEnabled.value = corePreferences.acceptEarlyMedia &&
call.state == Call.State.IncomingEarlyMedia &&
call.currentParams.videoEnabled()
} }
fun answer(doAction: Boolean) { fun answer(doAction: Boolean) {

View file

@ -125,6 +125,13 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
} }
val voiceMailUri = MutableLiveData<String>() val voiceMailUri = MutableLiveData<String>()
val acceptEarlyMediaListener = object : SettingListenerStub() {
override fun onBoolValueChanged(newValue: Boolean) {
prefs.acceptEarlyMedia = newValue
}
}
val acceptEarlyMedia = MutableLiveData<Boolean>()
val goToAndroidNotificationSettingsListener = object : SettingListenerStub() { val goToAndroidNotificationSettingsListener = object : SettingListenerStub() {
override fun onClicked() { override fun onClicked() {
goToAndroidNotificationSettingsEvent.value = Event(true) goToAndroidNotificationSettingsEvent.value = Event(true)
@ -147,6 +154,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
autoAnswerDelay.value = prefs.autoAnswerDelay autoAnswerDelay.value = prefs.autoAnswerDelay
incomingTimeout.value = core.incTimeout incomingTimeout.value = core.incTimeout
voiceMailUri.value = prefs.voiceMailUri voiceMailUri.value = prefs.voiceMailUri
acceptEarlyMedia.value = prefs.acceptEarlyMedia
} }
private fun initEncryptionList() { private fun initEncryptionList() {

View file

@ -157,6 +157,12 @@ class CorePreferences constructor(private val context: Context) {
config.setBool("app", "incoming_call_vibration", value) config.setBool("app", "incoming_call_vibration", value)
} }
var acceptEarlyMedia: Boolean
get() = config.getBool("sip", "incoming_calls_early_media", false)
set(value) {
config.setBool("sip", "incoming_calls_early_media", value)
}
var autoAnswerEnabled: Boolean var autoAnswerEnabled: Boolean
get() = config.getBool("app", "auto_answer", false) get() = config.getBool("app", "auto_answer", false)
set(value) { set(value) {

View file

@ -42,14 +42,15 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center" android:gravity="center"
android:paddingTop="5dp" /> android:paddingTop="10dp" />
<Chronometer <Chronometer
android:id="@+id/active_call_timer" android:id="@+id/active_call_timer"
style="@style/sip_uri_font" style="@style/sip_uri_font"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" /> android:layout_gravity="center"
android:paddingBottom="10dp" />
</LinearLayout> </LinearLayout>

View file

@ -42,14 +42,15 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center" android:gravity="center"
android:paddingTop="5dp" /> android:paddingTop="10dp" />
<Chronometer <Chronometer
android:id="@+id/active_call_timer" android:id="@+id/active_call_timer"
style="@style/sip_uri_font" style="@style/sip_uri_font"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" /> android:layout_gravity="center"
android:paddingBottom="10dp" />
</LinearLayout> </LinearLayout>

View file

@ -39,16 +39,59 @@
</RelativeLayout> </RelativeLayout>
<TextureView
android:id="@+id/remote_video_surface"
android:visibility="@{viewModel.earlyMediaVideoEnabled ? View.VISIBLE : View.GONE}"
android:layout_below="@id/top_bar"
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:visibility="@{viewModel.earlyMediaVideoEnabled ? View.VISIBLE : View.GONE, default=gone}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top_bar"
android:layout_centerHorizontal="true"
android:background="?attr/backgroundColor"
android:alpha="0.8"
android:orientation="vertical">
<TextView
android:text="@{viewModel.contact.fullName ?? viewModel.displayName}"
style="@style/big_contact_name_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="10dp" />
<org.linphone.views.MarqueeTextView
android:text="@{viewModel.address}"
style="@style/sip_uri_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:singleLine="true"
android:paddingBottom="10dp" />
</LinearLayout>
<RelativeLayout
android:visibility="@{viewModel.earlyMediaVideoEnabled ? View.GONE : View.VISIBLE}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<TextView <TextView
android:id="@+id/contact_name" android:id="@+id/contact_name"
android:text="@{viewModel.contact.fullName ?? viewModel.displayName}" android:text="@{viewModel.contact.fullName ?? viewModel.displayName}"
style="@style/big_contact_name_font" style="@style/big_contact_name_font"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/top_bar"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal"
android:paddingTop="5dp" /> android:paddingTop="10dp" />
<org.linphone.views.MarqueeTextView <org.linphone.views.MarqueeTextView
android:id="@+id/contact_number" android:id="@+id/contact_number"
@ -64,24 +107,16 @@
<org.linphone.contact.BigContactAvatarView <org.linphone.contact.BigContactAvatarView
android:id="@+id/avatar" android:id="@+id/avatar"
android:visibility="@{viewModel.earlyMediaVideoEnabled ? View.GONE : View.VISIBLE}"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="200dp" android:layout_height="200dp"
android:layout_margin="5dp" android:layout_margin="5dp"
android:layout_below="@id/contact_number" android:layout_below="@id/contact_number"
android:layout_above="@id/buttons"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:gravity="center" android:gravity="center"
tools:layout="@layout/contact_avatar_big" tools:layout="@layout/contact_avatar_big"
app:viewModel="@{viewModel}"/> app:viewModel="@{viewModel}"/>
<TextureView </RelativeLayout>
android:id="@+id/remote_video_surface"
android:visibility="@{viewModel.earlyMediaVideoEnabled ? View.VISIBLE : View.GONE}"
android:layout_below="@id/contact_number"
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<org.linphone.activities.call.views.AnswerDeclineIncomingCallButtons <org.linphone.activities.call.views.AnswerDeclineIncomingCallButtons
android:id="@+id/buttons" android:id="@+id/buttons"

View file

@ -51,16 +51,20 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<TextView <TextView
android:id="@+id/contact_name" android:id="@+id/contact_name"
android:text="@{viewModel.contact.fullName ?? viewModel.displayName}" android:text="@{viewModel.contact.fullName ?? viewModel.displayName}"
style="@style/big_contact_name_font" style="@style/big_contact_name_font"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/top_bar"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal"
android:paddingTop="5dp" /> android:paddingTop="10dp" />
<org.linphone.views.MarqueeTextView <org.linphone.views.MarqueeTextView
android:id="@+id/contact_number" android:id="@+id/contact_number"
@ -85,6 +89,8 @@
tools:layout="@layout/contact_avatar_big" tools:layout="@layout/contact_avatar_big"
app:viewModel="@{viewModel}"/> app:viewModel="@{viewModel}"/>
</RelativeLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"

View file

@ -157,6 +157,13 @@
linphone:defaultValue="@{viewModel.voiceMailUri}" linphone:defaultValue="@{viewModel.voiceMailUri}"
linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"/> linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"/>
<include
layout="@layout/settings_widget_switch"
linphone:title="@{@string/call_settings_accept_early_media_title}"
linphone:subtitle="@{@string/call_settings_accept_early_media_summary}"
linphone:listener="@{viewModel.acceptEarlyMediaListener}"
linphone:checked="@={viewModel.acceptEarlyMedia}"/>
<include <include
layout="@layout/settings_widget_basic" layout="@layout/settings_widget_basic"
linphone:listener="@{viewModel.goToAndroidNotificationSettingsListener}" linphone:listener="@{viewModel.goToAndroidNotificationSettingsListener}"

View file

@ -395,6 +395,8 @@
<string name="call_settings_incoming_timeout_title">Incoming call timeout</string> <string name="call_settings_incoming_timeout_title">Incoming call timeout</string>
<string name="call_settings_incoming_timeout_summary">in seconds</string> <string name="call_settings_incoming_timeout_summary">in seconds</string>
<string name="call_settings_voice_mail_uri_title">Voice mail URI</string> <string name="call_settings_voice_mail_uri_title">Voice mail URI</string>
<string name="call_settings_accept_early_media_title">Accept early media</string>
<string name="call_settings_accept_early_media_summary"></string>
<string name="call_settings_voice_mail_uri_summary"></string> <string name="call_settings_voice_mail_uri_summary"></string>
<string name="call_settings_go_to_android_notification_settings">Android notification settings</string> <string name="call_settings_go_to_android_notification_settings">Android notification settings</string>