fix: remove wrap content for renderers and look more at recovering from network switches

This commit is contained in:
jubb
2021-12-14 16:21:23 +11:00
parent b0d1afdd72
commit cfbe09d106
5 changed files with 86 additions and 38 deletions

View File

@@ -267,11 +267,6 @@ class WebRtcCallActivity: PassphraseRequiredActionBarActivity() {
viewModel.localRenderer?.let { surfaceView ->
surfaceView.setZOrderOnTop(true)
local_renderer.addView(surfaceView)
val params = surfaceView.layoutParams as FrameLayout.LayoutParams
params.width = FrameLayout.LayoutParams.WRAP_CONTENT
params.height = FrameLayout.LayoutParams.WRAP_CONTENT
params.gravity = Gravity.CENTER
surfaceView.layoutParams = params
}
}
local_renderer.isVisible = isEnabled
@@ -285,11 +280,6 @@ class WebRtcCallActivity: PassphraseRequiredActionBarActivity() {
if (isEnabled) {
viewModel.remoteRenderer?.let { surfaceView ->
remote_renderer.addView(surfaceView)
val params = surfaceView.layoutParams as FrameLayout.LayoutParams
params.width = ViewGroup.LayoutParams.WRAP_CONTENT
params.height = ViewGroup.LayoutParams.WRAP_CONTENT
params.gravity = Gravity.CENTER
surfaceView.layoutParams = params
}
}
remote_renderer.isVisible = isEnabled

View File

@@ -6,6 +6,7 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.media.AudioManager
import android.net.ConnectivityManager
import android.os.IBinder
import android.os.ResultReceiver
import android.telephony.PhoneStateListener
@@ -25,6 +26,7 @@ import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_IN
import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_INCOMING_PRE_OFFER
import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_INCOMING_RINGING
import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_OUTGOING_RINGING
import org.thoughtcrime.securesms.util.ContextProvider
import org.thoughtcrime.securesms.webrtc.*
import org.thoughtcrime.securesms.webrtc.CallManager.CallState.*
import org.thoughtcrime.securesms.webrtc.audio.OutgoingRinger
@@ -263,7 +265,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener {
networkChangedReceiver = NetworkChangeReceiver { available ->
networkChange(available)
}
LocalBroadcastManager.getInstance(this).registerReceiver(networkChangedReceiver!!, IntentFilter("pathsBuilt"))
networkChangedReceiver!!.register(this)
}
private fun registerUncaughtExceptionHandler() {
@@ -647,7 +649,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener {
unregisterReceiver(receiver)
}
networkChangedReceiver?.let { receiver ->
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
receiver.unregister(this)
}
wantsToAnswerReceiver?.let { receiver ->
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
@@ -660,7 +662,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener {
}
fun networkChange(networkAvailable: Boolean) {
if (!callManager.isReestablishing && callManager.currentConnectionState in arrayOf(STATE_CONNECTED)) {
if (networkAvailable && !callManager.isReestablishing && callManager.currentConnectionState in arrayOf(STATE_CONNECTED)) {
callManager.networkReestablished()
}
}

View File

@@ -181,8 +181,6 @@ class CallManager(context: Context, audioManager: AudioManagerCompat, private va
localRenderer = SurfaceViewRenderer(context)
remoteRenderer = SurfaceViewRenderer(context)
localRenderer?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
remoteRenderer?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
localRenderer?.init(base.eglBaseContext, null)
remoteRenderer?.init(base.eglBaseContext, null)
@@ -641,6 +639,7 @@ class CallManager(context: Context, audioManager: AudioManagerCompat, private va
if (isReestablishing) return
isReestablishing = true
Log.d("Loki", "start re-establish")
val offer = connection.createOffer(MediaConstraints().apply {
mandatory.add(MediaConstraints.KeyValuePair("IceRestart", "true"))

View File

@@ -3,12 +3,49 @@ package org.thoughtcrime.securesms.webrtc
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.net.Network
import android.os.Build
import android.util.SparseArray
import org.session.libsignal.utilities.Log
class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Unit): BroadcastReceiver() {
class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Unit) {
override fun onReceive(context: Context, intent: Intent) {
private val networkList: MutableSet<Network> = mutableSetOf()
val broadcastDelegate = object: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
receiveBroadcast(context, intent)
}
}
private fun checkNetworks() {
}
val defaultObserver = object: ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
Log.d("Loki", "onAvailable: $network")
networkList += network
}
override fun onLosing(network: Network, maxMsToLive: Int) {
Log.d("Loki", "onLosing: $network, maxMsToLive: $maxMsToLive")
}
override fun onLost(network: Network) {
Log.d("Loki", "onLost: $network")
networkList -= network
onNetworkChangedCallback(networkList.isNotEmpty())
}
override fun onUnavailable() {
Log.d("Loki", "onUnavailable")
}
}
fun receiveBroadcast(context: Context, intent: Intent) {
Log.d("Loki", intent.toString())
onNetworkChangedCallback(context.isConnected())
}
@@ -18,4 +55,23 @@ class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Uni
return cm.activeNetworkInfo?.isConnected ?: false
}
fun register(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
cm.registerDefaultNetworkCallback(defaultObserver)
} else {
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
context.registerReceiver(broadcastDelegate, intentFilter)
}
}
fun unregister(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
cm.unregisterNetworkCallback(defaultObserver)
} else {
context.unregisterReceiver(broadcastDelegate)
}
}
}

View File

@@ -166,35 +166,36 @@
app:layout_constraintHorizontal_bias="0.9"
/>
<TextView
android:textAllCaps="true"
android:theme="@style/Theme.Session.ForceDark"
style="@style/Widget.Session.Button.Common.ProminentOutline.Accent"
android:text="@string/accept_call"
android:layout_marginBottom="@dimen/large_spacing"
<ImageView
android:background="@drawable/circle_tintable"
android:src="@drawable/ic_baseline_call_24"
android:padding="@dimen/medium_spacing"
android:foregroundTint="@color/call_action_foreground"
android:backgroundTint="@color/accent"
android:layout_width="@dimen/large_button_height"
android:layout_height="@dimen/large_button_height"
android:layout_marginBottom="@dimen/very_large_spacing"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.85"
android:padding="@dimen/medium_spacing"
app:layout_constraintHorizontal_bias="0.75"
android:gravity="center"
android:id="@+id/acceptCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:id="@+id/acceptCallButton"/>
<TextView
android:textAllCaps="true"
style="@style/Widget.Session.Button.Common.UnimportantDestructive"
android:text="@string/decline_call"
android:layout_marginBottom="@dimen/large_spacing"
<ImageView
android:background="@drawable/circle_tintable"
android:src="@drawable/ic_baseline_call_end_24"
android:padding="@dimen/medium_spacing"
android:foregroundTint="@color/call_action_foreground"
android:backgroundTint="@color/destructive"
android:layout_width="@dimen/large_button_height"
android:layout_height="@dimen/large_button_height"
android:layout_marginBottom="@dimen/very_large_spacing"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.15"
android:padding="@dimen/medium_spacing"
android:id="@+id/declineCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
app:layout_constraintHorizontal_bias="0.25"
android:id="@+id/declineCallButton"/>
<androidx.constraintlayout.widget.Group
android:id="@+id/controlGroup"