mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-31 07:46:18 +00:00
fix: remove wrap content for renderers and look more at recovering from network switches
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user